
from Multipliers import *;

class Technology(Multipliers):
	def __init__(self):
		self.name = "Unnamed";
		self.description = "Description";
		self.quote = "Quote";
		
		self.preqs = [];
		
		
	
	def CanResearch(self, society):
		for p in self.preqs:
			if not society.HasTechnology(p):
				return False;
		return True;



#### Starting technologies

class Forgery(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Forgery";
		self.description = "";
		
class Writing(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Writing";
		self.description = "";

class Pottery(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Pottery";
		self.description = "";

class Irrigation(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Irrigation";
		self.description = "";

class Woodwork(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Woodwork";
		self.description = "";

class Masonry(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Masonry";
		self.description = "";

class TheWheel(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Masonry";
		self.description = "";
		
class Currency(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Currency";
		self.description = "";
		
		self.preqs = [Forgery];
		
class Polytheism(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Polytheism";
		self.description = "";
		
		self.preqs = [];

class HorsebackRiding(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Horseback Riding";
		self.description = "";
		
		self.preqs = [];
		

#### Religious
		
class Monotheism(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Monotheism";
		self.description = "";
		
		self.preqs = [Polytheism];

class Meditation(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Meditation";
		self.description = "";
		
		self.preqs = [Monotheism];

class Theology(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Theology";
		self.description = "";
		
		self.preqs = [Monotheism];


#### Economic

class Currency(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Currency";
		self.description = "";
		
		self.preqs = [Forgery];

class Trade(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Trade";
		self.description = "";
		
		self.preqs = [Currency];

class Banking(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Banking";
		self.description = "";
		
		self.preqs = [Mathematics, Trade];

class Bonds(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Bonds";
		self.description = """\
Allows your government to sell bonds to the public to raise money, at the cost of a fixed\
rate of interest. Selling bonds creates a Bonds Market (with Economics), increasing trade.""";
		
		self.preqs = [Banking];

class Investments(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Investments";
		self.description = """\
Allows capitalists to raise money for business through investors, who are paid dividends from\
the company's profits.""";
		
		self.preqs = [Banking];

class Economics(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Economics";
		self.description = """\
Allows capitalists (and government) to trade bonds and company stock.""";
		
		self.preqs = [Investments, Industrialization];



#### Civil Engineering

class Machinery(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Machinery";
		self.description = "";
		
		self.preqs = [Woodwork, TheWheel];

class Construction(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Construction";
		self.description = "";
		
		self.preqs = [Machinery, Masonry];	

class Engineering(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Engineering";
		self.description = "";
		
		self.preqs = [Construction];

class Invention(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Invention";
		self.description = "";
		
		self.preqs = [Chivalry, Engineering];

class SteamPower(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Steam Power";
		self.description = "";
		
		self.preqs = [Invention];

class Electricity(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Electricity";
		self.description = "";
		
		self.preqs = [SteamPower, Magnetism];

class Industrialization(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Industrialization";
		self.description = "";
		
		self.preqs = [SteamPower, Investments];

class Explosives(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Explosives";
		self.description = "";
		
		self.preqs = [Gunpowder, Industrialization];

class Combustion(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Combustion";
		self.description = "";
		
		self.preqs = [Electricity, Explosives];

class Steel(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Steel";
		self.description = "";
		
		self.preqs = [Explosives];

class Computation(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Computation";
		self.description = "";
		
		self.preqs = [Electricity, Industrialization];
		
class Radio(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Radio";
		self.description = "";
		
		self.preqs = [Electricity, Industrialization];

class Broadcasting(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Broadcasting";
		self.description = "";
		
		self.preqs = [Radio];
		
class Semiconductors(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Semiconductors";
		self.description = "";
		
		self.preqs = [Plastics, Computation];
		
class Miniaturization(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Miniaturization";
		self.description = "";
		
		self.preqs = [Semiconductors];
		
class TheInternet(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "The Internet";
		self.description = "";
		
		self.preqs = [Broadcasting, Miniaturization];

class Nanotechnology(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Nanotechnology";
		self.description = "";
		
		self.preqs = [Miniaturization];

class ArtificialIntelligence(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Artificial Intelligence";
		self.description = "";
		
		self.preqs = [Nanotechnology];
		

#### Health

class Sanitation(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Sanitation";
		self.description = "";
		
		self.preqs = [Industrialization];
		
class Medicine(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Medicine";
		self.description = "";
		
		self.preqs = [Sanitation, Biology];

class Genetics(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Genetics";
		self.description = "";
		
		self.preqs = [Medicine, Computation];

class Regeneration(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Regeneration";
		self.description = "";
		
		self.preqs = [Genetics, Nanotechnology];
		
		
#### Military

class Archery(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Archery";
		self.description = "";
		
		self.preqs = [Woodwork];
		
class Crafting(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Crafting";
		self.description = "";
		
		self.preqs = [Forgery];

class IronWorking(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Iron Working";
		self.description = "";
		
		self.preqs = [Crafting, Machinery];

class Gunpowder(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Gunpowder";
		self.description = "";
		
		self.preqs = [Chemistry];
		
class ArmouredWarfare(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Armoured Warfare";
		self.description = "";
		
		self.preqs = [Steel, Combustion];
		
class Leadership(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Leadership";
		self.description = "";
		
		self.preqs = [HorsebackRiding];
		
class Feudalism(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Feudalism";
		self.description = "";
		
		self.preqs = [Leadership];

class Chivalry(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Chivalry";
		self.description = "";
		
		self.preqs = [Feudalism];

class Privateering(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Privateering";
		self.description = "";
		
		self.preqs = [Feudalism, MapMaking];
		
class Seafaring(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Seafaring";
		self.description = "";
		
		self.preqs = [Woodwork];
		
class MapMaking(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Map Making";
		self.description = "";
		
		self.preqs = [Seafaring, Writing];

class Navigation(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Navigation";
		self.description = "";
		
		self.preqs = [MapMaking, Astronomy];

class Flight(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Flight";
		self.description = "";
		
		self.preqs = [Combustion];

class JetFlight(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Jet Flight";
		self.description = "";
		
		self.preqs = [Flight, Radio];

class Rocketry(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Rocketry";
		self.description = "";
		
		self.preqs = [JetFlight, Semiconductors];

class Lasers(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Lasers";
		self.description = "";
		
		self.preqs = [Miniaturization];
		
class SpaceFlight(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Space Flight";
		self.description = "";
		
		self.preqs = [Rocketry];

class AutomatedWarfare(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Automated Warfare";
		self.description = "";
		
		self.preqs = [ArtificialIntelligence, SpaceFlight];
		

#### Scientific

class Mathematics(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Mathematics";
		self.description = "";
		
		self.preqs = [Writing, Currency];
		
class Literature(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Literature";
		self.description = "";
		
		self.preqs = [Writing];

class Education(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Education";
		self.description = "";
		
		self.preqs = [Mathematics, Literature];

class Philosophy(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Philosophy";
		self.description = "";
		
		self.preqs = [Education];
	
class Astronomy(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Astronomy";
		self.description = "";
		
		self.preqs = [Philosophy, Seafaring];
		
class Physics(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Physics";
		self.description = "";
		self.quote = """\
\"To every action there is always opposed an equal reaction.\"
Issac Newton""";

		self.preqs = [Astronomy];

class Magnetism(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Magnetism";
		self.description = "";
		
		self.preqs = [Physics, Navigation];

class Chemistry(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Chemistry";
		self.description = "";
		
		self.preqs = [Physics];

class Biology(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Biology";
		self.description = "";
		
		self.preqs = [Chemistry];
		
class Relativity(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Relativity";
		self.description = "";
		
		self.preqs = [Electricity];

class AtomicTheory(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Atomic Theory";
		self.description = "";
		self.quote = "I am become Death, the destroyer of worlds.";
		
		self.preqs = [Relativity];

class QuantumMechanics(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Quantum Mechanics";
		self.description = "";
		
		self.preqs = [AtomicTheory];

class NuclearFusion(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Relativity";
		self.description = """\
Unlocks a near abundant clean source of energy""";
		
		self.preqs = [AtomicTheory, Lasers];

class GrandUnifiedTheory(Technology):
	def __init__(self):
		Technology.__init__(self);
		
		self.name = "Grand Unified Theory";
		self.description = """\
The holy grail of science, the Grand Unified Theory unites all natural forces of the universe in\
one master theory.""";
		self.quote = """\
\"The most incomprehensible thing about the world is that it is at all comprehensible.\"\
Albert Einstein""";

		self.preqs = [QuantumMechanics];



gTechnologies = [
	Forgery(), Writing(), Pottery(), Polytheism(), Irrigation(), Woodwork(), TheWheel(),
	HorsebackRiding(),
	
	Monotheism(), Theology(), Meditation(),
	
	Currency(), Mathematics(), Banking(), Bonds(), Investments(), Economics(),
	
	Machinery(), Construction(), Engineering(), Invention(), SteamPower(),
	Electricity(), Explosives(), Computation(), Industrialization(), Steel(),
	
	Sanitation(), Medicine(), Genetics(), Regeneration(),
	
	Archery(), Crafting(), IronWorking(), Gunpowder(), ArmouredWarfare(), 
	Leadership(), Feudalism(), Chivalry(), Privateering(),
	Seafaring(), MapMaking(), Navigation(),
	Flight(), JetFlight(), Rocketry(), Lasers(), SpaceFlight(),
	
	Mathematics(), Philosophy(), Astronomy(), Physics(), Magnetism(), Chemistry(), Biology(),
	Relativity(), AtomicTheory(), QuantumMechanics(), NuclearFusion(), GrandUnifiedTheory()
]